home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 August: Tool Chest / Dev.CD Aug 95 TC / Dev.CD Aug 95 TC.toast / New System Software Extensions / QuickDraw™ 3D 1.0 / Development / Interfaces / QD3DGeometry.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-02  |  35.2 KB  |  1,286 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DGeometry.h                                             **
  4.  **                                                                          **
  5.  **                                                                          **
  6.  **                                                                          **
  7.  **     Purpose:     Generic geometry routines                                 **
  8.  **                                                                          **
  9.  **                                                                          **
  10.  **                                                                          **
  11.  **     Copyright (C) 1991-1995 Apple Computer, Inc. All rights reserved.     **    
  12.  **                                                                             **
  13.  **                                                                          **
  14.  *****************************************************************************/
  15. #ifndef QD3DGeometry_h
  16. #define QD3DGeometry_h
  17.  
  18. #ifndef QD3D_h
  19. #include "QD3D.h"
  20. #endif  /*  QD3D_h  */
  21.  
  22. #if PRAGMA_ONCE
  23.     #pragma once
  24. #endif
  25.  
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif    /* __cplusplus */
  29.  
  30. /******************************************************************************
  31.  **                                                                             **
  32.  **                                Geometry Routines                             **
  33.  **                                                                             **
  34.  *****************************************************************************/
  35.  
  36. QD3D_EXPORT TQ3ObjectType Q3Geometry_GetType(
  37.     TQ3GeometryObject    geometry);
  38.  
  39. QD3D_EXPORT TQ3Status Q3Geometry_GetAttributeSet(
  40.     TQ3GeometryObject    geometry,
  41.     TQ3AttributeSet        *attributeSet);
  42.  
  43. QD3D_EXPORT TQ3Status Q3Geometry_SetAttributeSet(
  44.     TQ3GeometryObject    geometry,
  45.     TQ3AttributeSet        attributeSet);
  46.  
  47. QD3D_EXPORT TQ3Status Q3Geometry_Submit(
  48.     TQ3GeometryObject    geometry, 
  49.     TQ3ViewObject        view);
  50.  
  51.  
  52. /******************************************************************************
  53.  **                                                                             **
  54.  **                            Box    Data Structure Definitions                     **
  55.  **                                                                             **
  56.  *****************************************************************************/
  57.  
  58. typedef struct TQ3BoxData {
  59.     TQ3Point3D            origin;
  60.     TQ3Vector3D            orientation;
  61.     TQ3Vector3D            majorAxis;
  62.     TQ3Vector3D            minorAxis;
  63.     TQ3AttributeSet        *faceAttributeSet;    /* Ordering : Left, right,     */
  64.                                             /*              front, back,     */
  65.                                             /*              top, bottom    */
  66.     TQ3AttributeSet        boxAttributeSet;
  67. } TQ3BoxData;
  68.  
  69.  
  70. /******************************************************************************
  71.  **                                                                             **
  72.  **                                Box Routines                                 **
  73.  **                                                                             **
  74.  *****************************************************************************/
  75.  
  76. QD3D_EXPORT TQ3GeometryObject Q3Box_New(
  77.     const TQ3BoxData    *boxData);
  78.  
  79. QD3D_EXPORT TQ3Status Q3Box_Submit(
  80.     const TQ3BoxData    *boxData,
  81.     TQ3ViewObject        view);
  82.     
  83. QD3D_EXPORT TQ3Status Q3Box_SetData(
  84.     TQ3GeometryObject    box, 
  85.     const TQ3BoxData    *boxData);
  86.  
  87. QD3D_EXPORT TQ3Status Q3Box_GetData(
  88.     TQ3GeometryObject    box,
  89.     TQ3BoxData            *boxData);
  90.  
  91. QD3D_EXPORT TQ3Status Q3Box_EmptyData(
  92.     TQ3BoxData            *boxData);
  93.     
  94. QD3D_EXPORT TQ3Status Q3Box_SetOrigin(
  95.     TQ3GeometryObject    box,
  96.     const TQ3Point3D    *origin);
  97.  
  98. QD3D_EXPORT TQ3Status Q3Box_SetOrientation(
  99.     TQ3GeometryObject    box,
  100.     const TQ3Vector3D    *orientation);
  101.  
  102. QD3D_EXPORT TQ3Status Q3Box_SetMajorAxis(
  103.     TQ3GeometryObject    box,
  104.     const TQ3Vector3D    *majorAxis);
  105.  
  106. QD3D_EXPORT TQ3Status Q3Box_SetMinorAxis(
  107.     TQ3GeometryObject    box,
  108.     const TQ3Vector3D    *minorAxis);
  109.  
  110. QD3D_EXPORT TQ3Status Q3Box_GetOrigin(
  111.     TQ3GeometryObject    box,
  112.     TQ3Point3D            *origin);
  113.  
  114. QD3D_EXPORT TQ3Status Q3Box_GetOrientation(
  115.     TQ3GeometryObject    box,
  116.     TQ3Vector3D            *orientation);
  117.  
  118. QD3D_EXPORT TQ3Status Q3Box_GetMajorAxis(
  119.     TQ3GeometryObject    box,
  120.     TQ3Vector3D            *majorAxis);
  121.  
  122. QD3D_EXPORT TQ3Status Q3Box_GetMinorAxis(
  123.     TQ3GeometryObject    box,
  124.     TQ3Vector3D            *minorAxis);
  125.  
  126. QD3D_EXPORT TQ3Status Q3Box_GetFaceAttributeSet(
  127.     TQ3GeometryObject    box,
  128.     unsigned long        faceIndex,
  129.     TQ3AttributeSet        *faceAttributeSet);
  130.  
  131. QD3D_EXPORT TQ3Status Q3Box_SetFaceAttributeSet(
  132.     TQ3GeometryObject    box,
  133.     unsigned long        faceIndex,
  134.     TQ3AttributeSet        faceAttributeSet);
  135.  
  136.  
  137. /******************************************************************************
  138.  **                                                                             **
  139.  **                    General Polygon Data Structure Definitions                 **
  140.  **                                                                             **
  141.  *****************************************************************************/
  142.  
  143. typedef enum TQ3GeneralPolygonShapeHint {
  144.     kQ3GeneralPolygonShapeHintComplex,
  145.     kQ3GeneralPolygonShapeHintConcave,
  146.     kQ3GeneralPolygonShapeHintConvex
  147. } TQ3GeneralPolygonShapeHint;
  148.  
  149. typedef struct TQ3GeneralPolygonContourData {
  150.     unsigned long                    numVertices;        
  151.     TQ3Vertex3D                        *vertices;            
  152. } TQ3GeneralPolygonContourData;
  153.  
  154. typedef struct TQ3GeneralPolygonData {
  155.     unsigned long                    numContours;
  156.     TQ3GeneralPolygonContourData    *contours;
  157.     TQ3GeneralPolygonShapeHint        shapeHint;
  158.     TQ3AttributeSet                    generalPolygonAttributeSet;
  159. } TQ3GeneralPolygonData;
  160.  
  161.  
  162. /******************************************************************************
  163.  **                                                                             **
  164.  **                            General polygon Routines                         **
  165.  **                                                                             **
  166.  *****************************************************************************/
  167.  
  168. QD3D_EXPORT TQ3GeometryObject Q3GeneralPolygon_New(
  169.     const TQ3GeneralPolygonData        *generalPolygonData);
  170.  
  171. QD3D_EXPORT TQ3Status Q3GeneralPolygon_Submit(
  172.      const TQ3GeneralPolygonData    *generalPolygonData,
  173.      TQ3ViewObject                    view);
  174.     
  175. QD3D_EXPORT TQ3Status Q3GeneralPolygon_SetData(
  176.     TQ3GeometryObject                generalPolygon, 
  177.     const TQ3GeneralPolygonData        *generalPolygonData);
  178.  
  179. QD3D_EXPORT TQ3Status Q3GeneralPolygon_GetData(
  180.     TQ3GeometryObject                polygon,
  181.     TQ3GeneralPolygonData            *generalPolygonData);
  182.  
  183. QD3D_EXPORT TQ3Status Q3GeneralPolygon_EmptyData(
  184.     TQ3GeneralPolygonData            *generalPolygonData);
  185.  
  186. QD3D_EXPORT TQ3Status Q3GeneralPolygon_GetVertexPosition(
  187.     TQ3GeometryObject                generalPolygon,
  188.     unsigned long                    contourIndex,
  189.     unsigned long                    pointIndex,
  190.     TQ3Point3D                        *position);
  191.  
  192. QD3D_EXPORT TQ3Status Q3GeneralPolygon_SetVertexPosition(
  193.     TQ3GeometryObject                generalPolygon,
  194.     unsigned long                    contourIndex,
  195.     unsigned long                    pointIndex,
  196.     const TQ3Point3D                *position);
  197.     
  198. QD3D_EXPORT TQ3Status Q3GeneralPolygon_GetVertexAttributeSet(
  199.     TQ3GeometryObject                generalPolygon,
  200.     unsigned long                    contourIndex,
  201.     unsigned long                    pointIndex,
  202.     TQ3AttributeSet                    *attributeSet);
  203.  
  204. QD3D_EXPORT TQ3Status Q3GeneralPolygon_SetVertexAttributeSet(
  205.     TQ3GeometryObject                generalPolygon,
  206.     unsigned long                    contourIndex,
  207.     unsigned long                    pointIndex,
  208.     TQ3AttributeSet                    attributeSet);
  209.  
  210. QD3D_EXPORT TQ3Status Q3GeneralPolygon_SetShapeHint(
  211.     TQ3GeometryObject                generalPolygon,
  212.     TQ3GeneralPolygonShapeHint        shapeHint);
  213.  
  214. QD3D_EXPORT TQ3Status Q3GeneralPolygon_GetShapeHint(
  215.     TQ3GeometryObject                generalPolygon,
  216.     TQ3GeneralPolygonShapeHint        *shapeHint);
  217.  
  218.  
  219. /******************************************************************************
  220.  **                                                                             **
  221.  **                        Line Data Structure Definitions                         **
  222.  **                                                                             **
  223.  *****************************************************************************/
  224.  
  225. typedef struct TQ3LineData {
  226.     TQ3Vertex3D            vertices[2];
  227.     TQ3AttributeSet        lineAttributeSet;
  228. } TQ3LineData;
  229.  
  230.  
  231. /******************************************************************************
  232.  **                                                                             **
  233.  **                            Line Routines                                     **
  234.  **                                                                             **
  235.  *****************************************************************************/
  236.  
  237. QD3D_EXPORT TQ3GeometryObject Q3Line_New(
  238.     const TQ3LineData         *lineData);
  239.  
  240. QD3D_EXPORT TQ3Status Q3Line_Submit(
  241.     const TQ3LineData         *lineData, 
  242.     TQ3ViewObject             view);
  243.  
  244. QD3D_EXPORT TQ3Status Q3Line_GetData(
  245.     TQ3GeometryObject         line,
  246.     TQ3LineData             *lineData);
  247.     
  248. QD3D_EXPORT TQ3Status Q3Line_SetData(
  249.     TQ3GeometryObject         line,
  250.     const TQ3LineData         *lineData);
  251.     
  252. QD3D_EXPORT TQ3Status Q3Line_GetVertexPosition(
  253.     TQ3GeometryObject        line,
  254.     unsigned long            index,
  255.     TQ3Point3D                *position);
  256.  
  257. QD3D_EXPORT TQ3Status Q3Line_SetVertexPosition(
  258.     TQ3GeometryObject        line,
  259.     unsigned long            index,
  260.     const TQ3Point3D        *position);
  261.  
  262. QD3D_EXPORT TQ3Status Q3Line_GetVertexAttributeSet(
  263.     TQ3GeometryObject        line,
  264.     unsigned long            index,
  265.     TQ3AttributeSet            *attributeSet);
  266.  
  267. QD3D_EXPORT TQ3Status Q3Line_SetVertexAttributeSet(
  268.     TQ3GeometryObject        line,
  269.     unsigned long            index,
  270.     TQ3AttributeSet            attributeSet);
  271.     
  272. QD3D_EXPORT TQ3Status Q3Line_EmptyData(
  273.     TQ3LineData             *lineData);
  274.  
  275.  
  276. /******************************************************************************
  277.  **                                                                             **
  278.  **                        Marker Data Structure Definitions                     **
  279.  **                                                                             **
  280.  *****************************************************************************/
  281.  
  282. typedef struct TQ3MarkerData {
  283.     TQ3Point3D            location;
  284.     long                xOffset;
  285.     long                yOffset;
  286.     TQ3Bitmap            bitmap;
  287.     TQ3AttributeSet        markerAttributeSet;
  288. } TQ3MarkerData;
  289.  
  290.  
  291. /******************************************************************************
  292.  **                                                                             **
  293.  **                                Marker Routines                                 **
  294.  **                                                                             **
  295.  *****************************************************************************/
  296.  
  297. QD3D_EXPORT TQ3GeometryObject Q3Marker_New(
  298.     const TQ3MarkerData        *markerData);
  299.  
  300. QD3D_EXPORT TQ3Status Q3Marker_Submit(
  301.     const TQ3MarkerData        *markerData,
  302.     TQ3ViewObject            view);
  303.     
  304. QD3D_EXPORT TQ3Status Q3Marker_SetData(
  305.     TQ3GeometryObject        geometry, 
  306.     const TQ3MarkerData        *markerData);
  307.  
  308. QD3D_EXPORT TQ3Status Q3Marker_GetData(
  309.     TQ3GeometryObject        geometry,
  310.     TQ3MarkerData            *markerData);
  311.  
  312. QD3D_EXPORT TQ3Status Q3Marker_EmptyData(
  313.     TQ3MarkerData            *markerData);
  314.     
  315. QD3D_EXPORT TQ3Status Q3Marker_GetPosition(
  316.     TQ3GeometryObject        marker,
  317.     TQ3Point3D                *location);
  318.  
  319. QD3D_EXPORT TQ3Status Q3Marker_SetPosition(
  320.     TQ3GeometryObject        marker,
  321.     const TQ3Point3D        *location);
  322.     
  323. QD3D_EXPORT TQ3Status Q3Marker_GetXOffset(
  324.     TQ3GeometryObject        marker,
  325.     long                    *xOffset);
  326.  
  327. QD3D_EXPORT TQ3Status Q3Marker_SetXOffset(
  328.     TQ3GeometryObject        marker,
  329.     long                    xOffset);
  330.  
  331. QD3D_EXPORT TQ3Status Q3Marker_GetYOffset(
  332.     TQ3GeometryObject        marker,
  333.     long                    *yOffset);
  334.  
  335. QD3D_EXPORT TQ3Status Q3Marker_SetYOffset(
  336.     TQ3GeometryObject        marker,
  337.     long                    yOffset);
  338.  
  339. QD3D_EXPORT TQ3Status Q3Marker_GetBitmap(
  340.     TQ3GeometryObject        marker,
  341.     TQ3Bitmap                *bitmap);
  342.  
  343. QD3D_EXPORT TQ3Status Q3Marker_SetBitmap(
  344.     TQ3GeometryObject        marker,
  345.     const TQ3Bitmap            *bitmap);
  346.  
  347.  
  348.  
  349. /******************************************************************************
  350.  **                                                                             **
  351.  **                        Mesh Data Structure Definitions                         **
  352.  **                                                                             **
  353.  *****************************************************************************/
  354.  
  355. typedef struct TQ3MeshComponentPrivate     *TQ3MeshComponent;
  356. typedef struct TQ3MeshVertexPrivate     *TQ3MeshVertex;
  357. typedef struct TQ3MeshVertexPrivate     *TQ3MeshFace;
  358. typedef struct TQ3MeshEdgeRepPrivate     *TQ3MeshEdge;
  359. typedef struct TQ3MeshContourPrivate    *TQ3MeshContour;
  360.  
  361.  
  362. /******************************************************************************
  363.  **                                                                             **
  364.  **                            Mesh Routines                                      **
  365.  **                                                                             **
  366.  *****************************************************************************/
  367.  
  368. /*
  369.  *  Constructors
  370.  */
  371. QD3D_EXPORT TQ3GeometryObject Q3Mesh_New(
  372.     void);
  373.  
  374. QD3D_EXPORT TQ3MeshVertex Q3Mesh_VertexNew(
  375.     TQ3GeometryObject    mesh,
  376.     const TQ3Vertex3D    *vertex);
  377.             
  378. QD3D_EXPORT TQ3MeshFace Q3Mesh_FaceNew(
  379.     TQ3GeometryObject    mesh,
  380.     unsigned long        numVertices,
  381.     const TQ3MeshVertex    *vertices,
  382.     TQ3AttributeSet        attributeSet);
  383.  
  384. /*
  385.  *  Destructors
  386.  */
  387. QD3D_EXPORT TQ3Status Q3Mesh_VertexDelete( 
  388.     TQ3GeometryObject    mesh,
  389.     TQ3MeshVertex        vertex);
  390.  
  391. QD3D_EXPORT TQ3Status Q3Mesh_FaceDelete(
  392.     TQ3GeometryObject    mesh,
  393.     TQ3MeshFace            face);
  394.  
  395. /*
  396.  * Methods
  397.  */
  398. QD3D_EXPORT TQ3Status Q3Mesh_DelayUpdates(
  399.     TQ3GeometryObject    mesh);
  400.  
  401. QD3D_EXPORT TQ3Status Q3Mesh_ResumeUpdates(
  402.     TQ3GeometryObject    mesh);
  403.     
  404. QD3D_EXPORT TQ3MeshContour Q3Mesh_FaceToContour(
  405.     TQ3GeometryObject    mesh,
  406.     TQ3MeshFace            containerFace,
  407.     TQ3MeshFace            face);
  408.     
  409. QD3D_EXPORT TQ3MeshFace Q3Mesh_ContourToFace(
  410.     TQ3GeometryObject    mesh,
  411.     TQ3MeshContour        contour);
  412.  
  413. /*
  414.  * Mesh
  415.  */
  416. QD3D_EXPORT TQ3Status Q3Mesh_GetNumComponents(
  417.     TQ3GeometryObject    mesh,
  418.     unsigned long        *numComponents);
  419.  
  420. QD3D_EXPORT TQ3Status Q3Mesh_GetNumEdges(
  421.     TQ3GeometryObject    mesh,
  422.     unsigned long        *numEdges);
  423.  
  424. QD3D_EXPORT TQ3Status Q3Mesh_GetNumVertices(
  425.     TQ3GeometryObject    mesh,
  426.     unsigned long        *numVertices);
  427.  
  428. QD3D_EXPORT TQ3Status Q3Mesh_GetNumFaces(
  429.     TQ3GeometryObject    mesh,
  430.     unsigned long        *numFaces);
  431.  
  432. QD3D_EXPORT TQ3Status Q3Mesh_GetNumCorners(
  433.     TQ3GeometryObject    mesh,
  434.     unsigned long        *numCorners);
  435.  
  436. QD3D_EXPORT TQ3Status Q3Mesh_GetOrientable(
  437.     TQ3GeometryObject    mesh,
  438.     TQ3Boolean            *orientable);
  439.  
  440. /*
  441.  * Component
  442.  */
  443. QD3D_EXPORT TQ3Status Q3Mesh_GetComponentNumVertices(
  444.     TQ3GeometryObject    mesh,
  445.     TQ3MeshComponent    component,
  446.     unsigned long        *numVertices);
  447.  
  448. QD3D_EXPORT TQ3Status Q3Mesh_GetComponentNumEdges(
  449.     TQ3GeometryObject    mesh,
  450.     TQ3MeshComponent    component,
  451.     unsigned long        *numEdges);
  452.  
  453. QD3D_EXPORT TQ3Status Q3Mesh_GetComponentBoundingBox(
  454.     TQ3GeometryObject    mesh,
  455.     TQ3MeshComponent    component,
  456.     TQ3BoundingBox        *boundingBox);
  457.  
  458. QD3D_EXPORT TQ3Status Q3Mesh_GetComponentOrientable(
  459.     TQ3GeometryObject    mesh,
  460.     TQ3MeshComponent    component,
  461.     TQ3Boolean            *orientable);
  462.  
  463. /*
  464.  * Vertex
  465.  */
  466. QD3D_EXPORT TQ3Status Q3Mesh_GetVertexCoordinates(
  467.     TQ3GeometryObject    mesh,
  468.     TQ3MeshVertex        vertex,
  469.     TQ3Point3D            *coordinates);
  470.  
  471. QD3D_EXPORT TQ3Status Q3Mesh_GetVertexIndex(
  472.     TQ3GeometryObject    mesh,
  473.     TQ3MeshVertex        vertex,
  474.     unsigned long        *index);
  475.  
  476. QD3D_EXPORT TQ3Status Q3Mesh_GetVertexOnBoundary(
  477.     TQ3GeometryObject    mesh,
  478.     TQ3MeshVertex        vertex,
  479.     TQ3Boolean            *onBoundary);
  480.  
  481. QD3D_EXPORT TQ3Status Q3Mesh_GetVertexComponent(
  482.     TQ3GeometryObject    mesh,
  483.     TQ3MeshVertex        vertex,
  484.     TQ3MeshComponent    *component);
  485.  
  486. QD3D_EXPORT TQ3Status Q3Mesh_GetVertexAttributeSet(
  487.     TQ3GeometryObject    mesh,
  488.     TQ3MeshVertex        vertex,
  489.     TQ3AttributeSet        *attributeSet);
  490.  
  491.  
  492. QD3D_EXPORT TQ3Status Q3Mesh_SetVertexCoordinates(
  493.     TQ3GeometryObject    mesh,
  494.     TQ3MeshVertex        vertex,
  495.     const TQ3Point3D    *coordinates);
  496.  
  497. QD3D_EXPORT TQ3Status Q3Mesh_SetVertexAttributeSet(
  498.     TQ3GeometryObject    mesh,
  499.     TQ3MeshVertex        vertex,
  500.     TQ3AttributeSet        attributeSet);
  501.  
  502.  
  503. /*
  504.  * Face
  505.  */
  506. QD3D_EXPORT TQ3Status Q3Mesh_GetFaceNumVertices(
  507.     TQ3GeometryObject    mesh,
  508.     TQ3MeshFace            face,
  509.     unsigned long        *numVertices);
  510.  
  511. QD3D_EXPORT TQ3Status Q3Mesh_GetFacePlaneEquation(
  512.     TQ3GeometryObject    mesh,
  513.     TQ3MeshFace            face,
  514.     TQ3PlaneEquation    *planeEquation);
  515.  
  516. QD3D_EXPORT TQ3Status Q3Mesh_GetFaceNumContours(
  517.     TQ3GeometryObject    mesh,
  518.     TQ3MeshFace            face,
  519.     unsigned long        *numContours);
  520.  
  521. QD3D_EXPORT TQ3Status Q3Mesh_GetFaceIndex(
  522.     TQ3GeometryObject    mesh,
  523.     TQ3MeshFace            face,
  524.     unsigned long        *index);
  525.  
  526. QD3D_EXPORT TQ3Status Q3Mesh_GetFaceComponent(
  527.     TQ3GeometryObject    mesh,
  528.     TQ3MeshFace            face,
  529.     TQ3MeshComponent    *component);
  530.  
  531. QD3D_EXPORT TQ3Status Q3Mesh_GetFaceAttributeSet(
  532.     TQ3GeometryObject    mesh,
  533.     TQ3MeshFace            face,
  534.     TQ3AttributeSet        *attributeSet);
  535.  
  536.  
  537. QD3D_EXPORT TQ3Status Q3Mesh_SetFaceAttributeSet(
  538.     TQ3GeometryObject    mesh,
  539.     TQ3MeshFace            face,
  540.     TQ3AttributeSet        attributeSet);
  541.  
  542. /*
  543.  * Edge
  544.  */
  545. QD3D_EXPORT TQ3Status Q3Mesh_GetEdgeVertices(
  546.     TQ3GeometryObject    mesh,
  547.     TQ3MeshEdge            edge,
  548.     TQ3MeshVertex        *vertex1,
  549.     TQ3MeshVertex        *vertex2);
  550.  
  551. QD3D_EXPORT TQ3Status Q3Mesh_GetEdgeFaces(
  552.     TQ3GeometryObject    mesh,
  553.     TQ3MeshEdge            edge,
  554.     TQ3MeshFace            *face1,
  555.     TQ3MeshFace            *face2);
  556.  
  557. QD3D_EXPORT TQ3Status Q3Mesh_GetEdgeOnBoundary(
  558.     TQ3GeometryObject    mesh,
  559.     TQ3MeshEdge            edge,
  560.     TQ3Boolean            *onBoundary);
  561.  
  562. QD3D_EXPORT TQ3Status Q3Mesh_GetEdgeComponent(
  563.     TQ3GeometryObject    mesh,
  564.     TQ3MeshEdge            edge,
  565.     TQ3MeshComponent    *component);
  566.  
  567. QD3D_EXPORT TQ3Status Q3Mesh_GetEdgeAttributeSet(
  568.     TQ3GeometryObject    mesh,
  569.     TQ3MeshEdge            edge,
  570.     TQ3AttributeSet        *attributeSet);
  571.     
  572.  
  573. QD3D_EXPORT TQ3Status Q3Mesh_SetEdgeAttributeSet(
  574.     TQ3GeometryObject    mesh,
  575.     TQ3MeshEdge            edge,
  576.     TQ3AttributeSet        attributeSet);
  577.     
  578. /*
  579.  * Contour
  580.  */
  581. QD3D_EXPORT TQ3Status Q3Mesh_GetContourFace(
  582.     TQ3GeometryObject    mesh,
  583.     TQ3MeshContour        contour,
  584.     TQ3MeshFace            *face);
  585.  
  586. QD3D_EXPORT TQ3Status Q3Mesh_GetContourNumVertices(
  587.     TQ3GeometryObject    mesh,
  588.     TQ3MeshContour        contour,
  589.     unsigned long        *numVertices);
  590.  
  591. /*
  592.  * Corner
  593.  */
  594. QD3D_EXPORT TQ3Status Q3Mesh_GetCornerAttributeSet(
  595.     TQ3GeometryObject    mesh,
  596.     TQ3MeshVertex        vertex,
  597.     TQ3MeshFace            face,
  598.     TQ3AttributeSet        *attributeSet);
  599.  
  600. QD3D_EXPORT TQ3Status Q3Mesh_SetCornerAttributeSet(
  601.     TQ3GeometryObject    mesh,
  602.     TQ3MeshVertex        vertex,
  603.     TQ3MeshFace            face,
  604.     TQ3AttributeSet        attributeSet);
  605.  
  606.  
  607. /*
  608.  * Public Mesh Iterators
  609.  */
  610. typedef struct TQ3MeshIterator {
  611.     void                *var1;
  612.     void                *var2;
  613.     void                *var3;
  614.     struct {
  615.         void            *field1;
  616.         char            field2[4];
  617.     } var4;
  618. } TQ3MeshIterator;
  619.  
  620. QD3D_EXPORT TQ3MeshComponent Q3Mesh_FirstMeshComponent(
  621.     TQ3GeometryObject    mesh,
  622.     TQ3MeshIterator        *iterator);
  623.     
  624. QD3D_EXPORT TQ3MeshComponent Q3Mesh_NextMeshComponent(
  625.     TQ3MeshIterator        *iterator);
  626.  
  627. QD3D_EXPORT TQ3MeshVertex Q3Mesh_FirstComponentVertex(
  628.     TQ3MeshComponent    component,
  629.     TQ3MeshIterator        *iterator);
  630.     
  631. QD3D_EXPORT TQ3MeshVertex Q3Mesh_NextComponentVertex(
  632.     TQ3MeshIterator        *iterator);
  633.  
  634. QD3D_EXPORT TQ3MeshEdge Q3Mesh_FirstComponentEdge(
  635.     TQ3MeshComponent    component,
  636.     TQ3MeshIterator        *iterator);
  637.     
  638. QD3D_EXPORT TQ3MeshEdge Q3Mesh_NextComponentEdge(
  639.     TQ3MeshIterator        *iterator);
  640.  
  641. QD3D_EXPORT TQ3MeshVertex Q3Mesh_FirstMeshVertex(
  642.     TQ3GeometryObject    mesh,
  643.     TQ3MeshIterator        *iterator);
  644.  
  645. QD3D_EXPORT TQ3MeshVertex Q3Mesh_NextMeshVertex(
  646.     TQ3MeshIterator        *iterator);
  647.  
  648. QD3D_EXPORT TQ3MeshFace Q3Mesh_FirstMeshFace(
  649.     TQ3GeometryObject    mesh,
  650.     TQ3MeshIterator        *iterator);
  651.  
  652. QD3D_EXPORT TQ3MeshFace Q3Mesh_NextMeshFace(
  653.     TQ3MeshIterator        *iterator);
  654.  
  655. QD3D_EXPORT TQ3MeshEdge Q3Mesh_FirstMeshEdge(
  656.     TQ3GeometryObject    mesh,
  657.     TQ3MeshIterator        *iterator);
  658.  
  659. QD3D_EXPORT TQ3MeshEdge Q3Mesh_NextMeshEdge(
  660.     TQ3MeshIterator        *iterator);
  661.  
  662. QD3D_EXPORT TQ3MeshEdge Q3Mesh_FirstVertexEdge(
  663.     TQ3MeshVertex        vertex,
  664.     TQ3MeshIterator        *iterator);
  665.     
  666. QD3D_EXPORT TQ3MeshEdge Q3Mesh_NextVertexEdge(
  667.     TQ3MeshIterator        *iterator);
  668.  
  669. QD3D_EXPORT TQ3MeshVertex Q3Mesh_FirstVertexVertex(
  670.     TQ3MeshVertex        vertex,
  671.     TQ3MeshIterator        *iterator);
  672.     
  673. QD3D_EXPORT TQ3MeshVertex Q3Mesh_NextVertexVertex(
  674.     TQ3MeshIterator        *iterator);
  675.  
  676. QD3D_EXPORT TQ3MeshFace Q3Mesh_FirstVertexFace(
  677.     TQ3MeshVertex        vertex,
  678.     TQ3MeshIterator        *iterator);
  679.     
  680. QD3D_EXPORT TQ3MeshFace Q3Mesh_NextVertexFace(
  681.     TQ3MeshIterator        *iterator);
  682.  
  683. QD3D_EXPORT TQ3MeshEdge Q3Mesh_FirstFaceEdge(
  684.     TQ3MeshFace            face,
  685.     TQ3MeshIterator        *iterator);
  686.     
  687. QD3D_EXPORT TQ3MeshEdge Q3Mesh_NextFaceEdge(
  688.     TQ3MeshIterator        *iterator);
  689.  
  690. QD3D_EXPORT TQ3MeshVertex Q3Mesh_FirstFaceVertex(
  691.     TQ3MeshFace            face,
  692.     TQ3MeshIterator        *iterator);
  693.     
  694. QD3D_EXPORT TQ3MeshVertex Q3Mesh_NextFaceVertex(
  695.     TQ3MeshIterator        *iterator);
  696.  
  697. QD3D_EXPORT TQ3MeshFace Q3Mesh_FirstFaceFace(
  698.     TQ3MeshFace            face,
  699.     TQ3MeshIterator        *iterator);
  700.     
  701. QD3D_EXPORT TQ3MeshFace Q3Mesh_NextFaceFace(
  702.     TQ3MeshIterator        *iterator);
  703.  
  704. QD3D_EXPORT TQ3MeshContour Q3Mesh_FirstFaceContour(
  705.     TQ3MeshFace            face,
  706.     TQ3MeshIterator        *iterator);
  707.  
  708. QD3D_EXPORT TQ3MeshContour Q3Mesh_NextFaceContour(
  709.     TQ3MeshIterator        *iterator);
  710.  
  711. QD3D_EXPORT TQ3MeshEdge Q3Mesh_FirstContourEdge(
  712.     TQ3MeshContour        contour,
  713.     TQ3MeshIterator        *iterator);
  714.     
  715. QD3D_EXPORT TQ3MeshEdge Q3Mesh_NextContourEdge(
  716.     TQ3MeshIterator        *iterator);
  717.  
  718. QD3D_EXPORT TQ3MeshVertex Q3Mesh_FirstContourVertex(
  719.     TQ3MeshContour        contour,
  720.     TQ3MeshIterator        *iterator);
  721.     
  722. QD3D_EXPORT TQ3MeshVertex Q3Mesh_NextContourVertex(
  723.     TQ3MeshIterator        *iterator);
  724.  
  725. QD3D_EXPORT TQ3MeshFace Q3Mesh_FirstContourFace(
  726.     TQ3MeshContour        contour,
  727.     TQ3MeshIterator        *iterator);
  728.     
  729. QD3D_EXPORT TQ3MeshFace Q3Mesh_NextContourFace(
  730.     TQ3MeshIterator        *iterator);
  731.  
  732. #define    Q3ForEachMeshComponent(m,c,i)                                        \
  733.     for ( (c) = Q3Mesh_FirstMeshComponent((m),(i));                            \
  734.           (c);                                                                \
  735.           (c) = Q3Mesh_NextMeshComponent((i)) )
  736.  
  737. #define Q3ForEachComponentVertex(c,v,i)                                        \
  738.     for ( (v) = Q3Mesh_FirstComponentVertex((c),(i));                        \
  739.           (v);                                                                \
  740.           (v) = Q3Mesh_NextComponentVertex((i)) )
  741.           
  742. #define Q3ForEachComponentEdge(c,e,i)                                        \
  743.     for ( (e) = Q3Mesh_FirstComponentEdge((c),(i));                            \
  744.           (e);                                                                \
  745.           (e) = Q3Mesh_NextComponentEdge((i)) )
  746.  
  747. #define Q3ForEachMeshVertex(m,v,i)                                            \
  748.     for ( (v) = Q3Mesh_FirstMeshVertex((m),(i));                            \
  749.           (v);                                                                \
  750.           (v) = Q3Mesh_NextMeshVertex((i)) )
  751.  
  752. #define Q3ForEachMeshFace(m,f,i)                                            \
  753.     for ( (f) = Q3Mesh_FirstMeshFace((m),(i));                                \
  754.           (f);                                                                \
  755.           (f) = Q3Mesh_NextMeshFace((i)) )
  756.  
  757. #define Q3ForEachMeshEdge(m,e,i)                                            \
  758.     for ( (e) = Q3Mesh_FirstMeshEdge((m),(i));                                \
  759.           (e);                                                                \
  760.           (e) = Q3Mesh_NextMeshEdge((i)) )
  761.  
  762. #define Q3ForEachVertexEdge(v,e,i)                                            \
  763.     for ( (e) = Q3Mesh_FirstVertexEdge((v),(i));                            \
  764.           (e);                                                                \
  765.           (e) = Q3Mesh_NextVertexEdge((i)) )
  766.  
  767. #define Q3ForEachVertexVertex(v,n,i)                                        \
  768.     for ( (n) = Q3Mesh_FirstVertexVertex((v),(i));                            \
  769.           (n);                                                                \
  770.           (n) = Q3Mesh_NextVertexVertex((i)) )
  771.  
  772. #define Q3ForEachVertexFace(v,f,i)                                            \
  773.     for ( (f) = Q3Mesh_FirstVertexFace((v),(i));                            \
  774.           (f);                                                                \
  775.           (f) = Q3Mesh_NextVertexFace((i)) )
  776.  
  777. #define Q3ForEachFaceEdge(f,e,i)                                            \
  778.     for ( (e) = Q3Mesh_FirstFaceEdge((f),(i));                                \
  779.           (e);                                                                \
  780.           (e) = Q3Mesh_NextFaceEdge((i)) )
  781.  
  782. #define Q3ForEachFaceVertex(f,v,i)                                            \
  783.     for ( (v) = Q3Mesh_FirstFaceVertex((f),(i));                            \
  784.           (v);                                                                \
  785.           (v) = Q3Mesh_NextFaceVertex((i)) )
  786.     
  787. #define Q3ForEachFaceFace(f,n,i)                                            \
  788.     for ( (n) = Q3Mesh_FirstFaceFace((f),(i));                              \
  789.           (n);                                                                \
  790.           (n) = Q3Mesh_NextFaceFace((i)) )
  791.           
  792. #define Q3ForEachFaceContour(f,h,i)                                            \
  793.     for ( (h) = Q3Mesh_FirstFaceContour((f),(i));                            \
  794.           (h);                                                                \
  795.           (h) = Q3Mesh_NextFaceContour((i)) )
  796.  
  797. #define Q3ForEachContourEdge(h,e,i)                                            \
  798.     for ( (e) = Q3Mesh_FirstContourEdge((h),(i));                            \
  799.           (e);                                                                \
  800.           (e) = Q3Mesh_NextContourEdge((i)) )
  801.  
  802. #define Q3ForEachContourVertex(h,v,i)                                        \
  803.     for ( (v) = Q3Mesh_FirstContourVertex((h),(i));                            \
  804.           (v);                                                                \
  805.           (v) = Q3Mesh_NextContourVertex((i)) )
  806.  
  807. #define Q3ForEachContourFace(h,f,i)                                            \
  808.     for ( (f) = Q3Mesh_FirstContourFace((h),(i));                            \
  809.           (f);                                                                \
  810.           (f) = Q3Mesh_NextContourFace((i)) )
  811.  
  812.  
  813. /******************************************************************************
  814.  **                                                                             **
  815.  **                            Maximum order for NURB Curves                     **
  816.  **                                                                             **
  817.  *****************************************************************************/
  818.  
  819. #define kQ3NURBCurveMaxOrder    16
  820.  
  821.  
  822. /******************************************************************************
  823.  **                                                                             **
  824.  **                            Data Structure Definitions                         **
  825.  **                                                                             **
  826.  *****************************************************************************/
  827.  
  828. typedef struct TQ3NURBCurveData {
  829.      unsigned long            order;
  830.      unsigned long            numPoints;
  831.      TQ3RationalPoint4D        *controlPoints;
  832.      float                    *knots;
  833.      TQ3AttributeSet            curveAttributeSet;
  834. } TQ3NURBCurveData;
  835.  
  836.  
  837. /******************************************************************************
  838.  **                                                                             **
  839.  **                                NURB Curve Routines                             **
  840.  **                                                                             **
  841.  *****************************************************************************/
  842.  
  843. QD3D_EXPORT TQ3GeometryObject Q3NURBCurve_New(
  844.     const TQ3NURBCurveData        *curveData);
  845.  
  846. QD3D_EXPORT TQ3Status Q3NURBCurve_Submit(
  847.     const TQ3NURBCurveData        *curveData,
  848.     TQ3ViewObject                view);
  849.  
  850. QD3D_EXPORT TQ3Status Q3NURBCurve_SetData(
  851.     TQ3GeometryObject            curve, 
  852.     const TQ3NURBCurveData        *nurbCurveData);
  853.  
  854. QD3D_EXPORT TQ3Status Q3NURBCurve_GetData(
  855.     TQ3GeometryObject            curve,
  856.     TQ3NURBCurveData            *nurbCurveData); 
  857.  
  858. QD3D_EXPORT TQ3Status Q3NURBCurve_EmptyData(
  859.     TQ3NURBCurveData            *nurbCurveData);
  860.  
  861. QD3D_EXPORT TQ3Status Q3NURBCurve_SetControlPoint(
  862.     TQ3GeometryObject            curve,
  863.     unsigned long                pointIndex,
  864.     const TQ3RationalPoint4D    *point4D);
  865.     
  866. QD3D_EXPORT TQ3Status Q3NURBCurve_GetControlPoint(
  867.     TQ3GeometryObject            curve,
  868.     unsigned long                pointIndex,
  869.     TQ3RationalPoint4D            *point4D);
  870.  
  871. QD3D_EXPORT TQ3Status Q3NURBCurve_SetKnot(
  872.     TQ3GeometryObject            curve,
  873.     unsigned long                knotIndex,
  874.     float                        knotValue);
  875.  
  876. QD3D_EXPORT TQ3Status Q3NURBCurve_GetKnot(
  877.     TQ3GeometryObject            curve,
  878.     unsigned long                knotIndex,
  879.     float                        *knotValue);
  880.  
  881.  
  882. /******************************************************************************
  883.  **                                                                             **
  884.  **                            Maximum NURB Patch Order                         **
  885.  **                                                                             **
  886.  *****************************************************************************/
  887.  
  888. #define    kQ3NURBPatchMaxOrder    11
  889.  
  890. /******************************************************************************
  891.  **                                                                             **
  892.  **                        NURB Patch Data Structure Definitions                 **
  893.  **                                                                             **
  894.  *****************************************************************************/
  895.  
  896. typedef struct TQ3NURBPatchTrimCurveData {
  897.      unsigned long                    order;
  898.      unsigned long                    numPoints;
  899.      TQ3RationalPoint3D                *controlPoints;    
  900.     float                            *knots;    
  901. } TQ3NURBPatchTrimCurveData;
  902.  
  903. typedef struct TQ3NURBPatchTrimLoopData {
  904.     unsigned long                    numTrimCurves;
  905.     TQ3NURBPatchTrimCurveData        *trimCurves;
  906. } TQ3NURBPatchTrimLoopData;
  907.  
  908. typedef struct TQ3NURBPatchData {
  909.     unsigned long                        uOrder;
  910.     unsigned long                    vOrder;
  911.     unsigned long                    numRows;
  912.     unsigned long                        numColumns;                                  
  913.     TQ3RationalPoint4D                *controlPoints;
  914.     float                            *uKnots; 
  915.     float                            *vKnots;
  916.     unsigned long                    numTrimLoops;
  917.     TQ3NURBPatchTrimLoopData        *trimLoops;
  918.     TQ3AttributeSet                    patchAttributeSet;
  919. } TQ3NURBPatchData;
  920.  
  921.  
  922. /******************************************************************************
  923.  **                                                                             **
  924.  **                                NURB Patch Routines                             **
  925.  **                                                                             **
  926.  *****************************************************************************/
  927.  
  928. QD3D_EXPORT TQ3GeometryObject Q3NURBPatch_New(
  929.     const TQ3NURBPatchData        *nurbPatchData);
  930.  
  931. QD3D_EXPORT TQ3Status Q3NURBPatch_Submit(
  932.     const TQ3NURBPatchData        *nurbPatchData,
  933.     TQ3ViewObject                view);
  934.  
  935. QD3D_EXPORT TQ3Status Q3NURBPatch_SetData(
  936.     TQ3GeometryObject            nurbPatch, 
  937.     const TQ3NURBPatchData        *nurbPatchData);
  938.  
  939. QD3D_EXPORT TQ3Status Q3NURBPatch_GetData(
  940.     TQ3GeometryObject            nurbPatch, 
  941.     TQ3NURBPatchData            *nurbPatchData);
  942.  
  943. QD3D_EXPORT TQ3Status Q3NURBPatch_SetControlPoint(
  944.     TQ3GeometryObject            nurbPatch,
  945.     unsigned long                rowIndex,
  946.     unsigned long                columnIndex,
  947.     const TQ3RationalPoint4D    *point4D);
  948.  
  949. QD3D_EXPORT TQ3Status Q3NURBPatch_GetControlPoint(
  950.     TQ3GeometryObject            nurbPatch,
  951.     unsigned long                rowIndex,
  952.     unsigned long                columnIndex,
  953.     TQ3RationalPoint4D            *point4D);
  954.  
  955. QD3D_EXPORT TQ3Status Q3NURBPatch_SetUKnot(
  956.     TQ3GeometryObject            nurbPatch,
  957.     unsigned long                knotIndex,
  958.     float                        knotValue);
  959.  
  960. QD3D_EXPORT TQ3Status Q3NURBPatch_SetVKnot(
  961.     TQ3GeometryObject            nurbPatch,
  962.     unsigned long                knotIndex,
  963.     float                        knotValue);
  964.     
  965. QD3D_EXPORT TQ3Status Q3NURBPatch_GetUKnot(
  966.     TQ3GeometryObject            nurbPatch,
  967.     unsigned long                knotIndex,
  968.     float                        *knotValue);
  969.  
  970. QD3D_EXPORT TQ3Status Q3NURBPatch_GetVKnot(
  971.     TQ3GeometryObject            nurbPatch,
  972.     unsigned long                knotIndex,
  973.     float                        *knotValue);
  974.  
  975. QD3D_EXPORT TQ3Status Q3NURBPatch_EmptyData(
  976.     TQ3NURBPatchData            *nurbPatchData);
  977.  
  978.  
  979. /******************************************************************************
  980.  **                                                                             **
  981.  **                        Point Data Structure Definitions                     **
  982.  **                                                                             **
  983.  *****************************************************************************/
  984.  
  985. typedef struct TQ3PointData {
  986.     TQ3Point3D            point;
  987.     TQ3AttributeSet        pointAttributeSet;
  988. } TQ3PointData;
  989.  
  990.  
  991. /******************************************************************************
  992.  **                                                                             **
  993.  **                                Point Routines                                 **
  994.  **                                                                             **
  995.  *****************************************************************************/
  996.     
  997. QD3D_EXPORT TQ3GeometryObject Q3Point_New(
  998.     const TQ3PointData         *pointData);
  999.  
  1000. QD3D_EXPORT TQ3Status Q3Point_Submit(
  1001.     const TQ3PointData         *pointData,
  1002.     TQ3ViewObject             view);
  1003.     
  1004. QD3D_EXPORT TQ3Status Q3Point_GetData(
  1005.     TQ3GeometryObject         point,
  1006.     TQ3PointData            *pointData);
  1007.     
  1008. QD3D_EXPORT TQ3Status Q3Point_SetData(
  1009.     TQ3GeometryObject         point,
  1010.     const TQ3PointData         *pointData);
  1011.     
  1012. QD3D_EXPORT TQ3Status Q3Point_EmptyData(
  1013.     TQ3PointData             *pointData);    
  1014.     
  1015. QD3D_EXPORT TQ3Status Q3Point_SetPosition(
  1016.     TQ3GeometryObject        point,
  1017.     const TQ3Point3D        *position);
  1018.     
  1019. QD3D_EXPORT TQ3Status Q3Point_GetPosition(
  1020.     TQ3GeometryObject        point,
  1021.     TQ3Point3D                *position);
  1022.  
  1023.  
  1024. /******************************************************************************
  1025.  **                                                                             **
  1026.  **                        Polygon Data Structure Definitions                     **
  1027.  **                                                                             **
  1028.  *****************************************************************************/
  1029.  
  1030. typedef struct TQ3PolygonData {
  1031.     unsigned long        numVertices;        
  1032.     TQ3Vertex3D            *vertices;            
  1033.     TQ3AttributeSet        polygonAttributeSet;
  1034. } TQ3PolygonData;
  1035.  
  1036.  
  1037. /******************************************************************************
  1038.  **                                                                             **
  1039.  **                            Polygon Routines                                 **
  1040.  **                                                                             **
  1041.  *****************************************************************************/
  1042.  
  1043. QD3D_EXPORT TQ3GeometryObject Q3Polygon_New(
  1044.     const TQ3PolygonData    *polygonData);
  1045.  
  1046. QD3D_EXPORT TQ3Status Q3Polygon_Submit(
  1047.     const TQ3PolygonData    *polygonData,
  1048.     TQ3ViewObject            view);
  1049.     
  1050. QD3D_EXPORT TQ3Status Q3Polygon_SetData(
  1051.     TQ3GeometryObject        polygon, 
  1052.     const TQ3PolygonData    *polygonData);
  1053.  
  1054. QD3D_EXPORT TQ3Status Q3Polygon_GetData(
  1055.     TQ3GeometryObject        polygon,
  1056.     TQ3PolygonData            *polygonData);
  1057.  
  1058. QD3D_EXPORT TQ3Status Q3Polygon_EmptyData(
  1059.     TQ3PolygonData            *polygonData);
  1060.  
  1061. QD3D_EXPORT TQ3Status Q3Polygon_GetVertexPosition(
  1062.     TQ3GeometryObject        polygon,
  1063.     unsigned long            index,
  1064.     TQ3Point3D                *point);
  1065.  
  1066. QD3D_EXPORT TQ3Status Q3Polygon_SetVertexPosition(
  1067.     TQ3GeometryObject        polygon,
  1068.     unsigned long            index,
  1069.     const TQ3Point3D        *point);
  1070.  
  1071. QD3D_EXPORT TQ3Status Q3Polygon_GetVertexAttributeSet(
  1072.     TQ3GeometryObject        polygon,
  1073.     unsigned long            index,
  1074.     TQ3AttributeSet            *attributeSet);
  1075.  
  1076. QD3D_EXPORT TQ3Status Q3Polygon_SetVertexAttributeSet(
  1077.     TQ3GeometryObject        polygon,
  1078.     unsigned long            index,
  1079.     TQ3AttributeSet            attributeSet);
  1080.  
  1081.  
  1082. /******************************************************************************
  1083.  **                                                                             **
  1084.  **                        PolyLine Data Structure Definitions                     **
  1085.  **                                                                             **
  1086.  *****************************************************************************/
  1087.  
  1088. typedef struct TQ3PolyLineData {
  1089.     unsigned long       numVertices;            
  1090.     TQ3Vertex3D            *vertices;                
  1091.     TQ3AttributeSet        *segmentAttributeSet;        
  1092.     TQ3AttributeSet        polyLineAttributeSet;        
  1093. } TQ3PolyLineData;
  1094.     
  1095.  
  1096. /******************************************************************************
  1097.  **                                                                             **
  1098.  **                            PolyLine Routines                                 **
  1099.  **                                                                             **
  1100.  *****************************************************************************/
  1101.  
  1102. QD3D_EXPORT TQ3GeometryObject Q3PolyLine_New(
  1103.     const TQ3PolyLineData    *polylineData);
  1104.  
  1105. QD3D_EXPORT TQ3Status Q3PolyLine_Submit(
  1106.     const TQ3PolyLineData    *polyLineData,
  1107.     TQ3ViewObject            view);
  1108.     
  1109. QD3D_EXPORT TQ3Status Q3PolyLine_SetData(
  1110.     TQ3GeometryObject        polyLine, 
  1111.     const TQ3PolyLineData    *polyLineData);
  1112.  
  1113. QD3D_EXPORT TQ3Status Q3PolyLine_GetData(
  1114.     TQ3GeometryObject        polyLine,
  1115.     TQ3PolyLineData            *polyLineData);
  1116.  
  1117. QD3D_EXPORT TQ3Status Q3PolyLine_EmptyData(
  1118.     TQ3PolyLineData            *polyLineData);
  1119.         
  1120. QD3D_EXPORT TQ3Status Q3PolyLine_GetVertexPosition(
  1121.     TQ3GeometryObject        polyLine,
  1122.     unsigned long            index,
  1123.     TQ3Point3D                *position);
  1124.  
  1125. QD3D_EXPORT TQ3Status Q3PolyLine_SetVertexPosition(
  1126.     TQ3GeometryObject        polyLine,
  1127.     unsigned long            index,
  1128.     const TQ3Point3D        *position);
  1129.  
  1130. QD3D_EXPORT TQ3Status Q3PolyLine_GetVertexAttributeSet(
  1131.     TQ3GeometryObject        polyLine,
  1132.     unsigned long            index,
  1133.     TQ3AttributeSet            *attributeSet);
  1134.  
  1135. QD3D_EXPORT TQ3Status Q3PolyLine_SetVertexAttributeSet(
  1136.     TQ3GeometryObject        polyLine,
  1137.     unsigned long            index,
  1138.     TQ3AttributeSet            attributeSet);
  1139.  
  1140. QD3D_EXPORT TQ3Status Q3PolyLine_GetSegmentAttributeSet(
  1141.     TQ3GeometryObject        polyLine,
  1142.     unsigned long            index,
  1143.     TQ3AttributeSet            *attributeSet);
  1144.  
  1145. QD3D_EXPORT TQ3Status Q3PolyLine_SetSegmentAttributeSet(
  1146.     TQ3GeometryObject        polyLine,
  1147.     unsigned long            index,
  1148.     TQ3AttributeSet            attributeSet);
  1149.  
  1150.  
  1151. /******************************************************************************
  1152.  **                                                                             **
  1153.  **                        Triangle Data Structure Definitions                     **
  1154.  **                                                                             **
  1155.  *****************************************************************************/
  1156.  
  1157. typedef struct TQ3TriangleData {
  1158.     TQ3Vertex3D            vertices[3];
  1159.     TQ3AttributeSet        triangleAttributeSet;
  1160. } TQ3TriangleData;
  1161.  
  1162.  
  1163. /******************************************************************************
  1164.  **                                                                             **
  1165.  **                            Triangle Routines                                 **
  1166.  **                                                                             **
  1167.  *****************************************************************************/
  1168.  
  1169. QD3D_EXPORT TQ3GeometryObject Q3Triangle_New(
  1170.     const TQ3TriangleData    *triangleData);
  1171.  
  1172. QD3D_EXPORT TQ3Status Q3Triangle_Submit(
  1173.     const TQ3TriangleData    *triangleData,
  1174.     TQ3ViewObject            view);
  1175.     
  1176. QD3D_EXPORT TQ3Status Q3Triangle_SetData(
  1177.     TQ3GeometryObject        triangle, 
  1178.     const TQ3TriangleData    *triangleData);
  1179.  
  1180. QD3D_EXPORT TQ3Status Q3Triangle_GetData(
  1181.     TQ3GeometryObject        triangle,
  1182.     TQ3TriangleData            *triangleData);
  1183.  
  1184. QD3D_EXPORT TQ3Status Q3Triangle_EmptyData(
  1185.     TQ3TriangleData            *triangleData);
  1186.  
  1187. QD3D_EXPORT TQ3Status Q3Triangle_GetVertexPosition(
  1188.     TQ3GeometryObject        triangle,
  1189.     unsigned long            index,
  1190.     TQ3Point3D                *point);
  1191.  
  1192. QD3D_EXPORT TQ3Status Q3Triangle_SetVertexPosition(
  1193.     TQ3GeometryObject        triangle,
  1194.     unsigned long            index,
  1195.     const TQ3Point3D        *point);
  1196.  
  1197. QD3D_EXPORT TQ3Status Q3Triangle_GetVertexAttributeSet(
  1198.     TQ3GeometryObject        triangle,
  1199.     unsigned long            index,
  1200.     TQ3AttributeSet            *attributeSet);
  1201.  
  1202. QD3D_EXPORT TQ3Status Q3Triangle_SetVertexAttributeSet(
  1203.     TQ3GeometryObject        triangle,
  1204.     unsigned long             index,
  1205.     TQ3AttributeSet             attributeSet);
  1206.  
  1207.  
  1208. /******************************************************************************
  1209.  **                                                                             **
  1210.  **                        TriGrid Data Structure Definitions                     **
  1211.  **                                                                             **
  1212.  *****************************************************************************/
  1213.  
  1214. typedef struct TQ3TriGridData {
  1215.     unsigned long        numRows;            
  1216.     unsigned long        numColumns;
  1217.     TQ3Vertex3D            *vertices;            
  1218.     TQ3AttributeSet        *facetAttributeSet;
  1219.     TQ3AttributeSet        triGridAttributeSet;
  1220. } TQ3TriGridData;
  1221.  
  1222.  
  1223. /******************************************************************************
  1224.  **                                                                             **
  1225.  **                                TriGrid Routines                             **
  1226.  **                                                                             **
  1227.  *****************************************************************************/
  1228.  
  1229. QD3D_EXPORT TQ3GeometryObject Q3TriGrid_New(
  1230.     const TQ3TriGridData    *triGridData);
  1231.  
  1232. QD3D_EXPORT TQ3Status Q3TriGrid_Submit(
  1233.     const TQ3TriGridData    *triGridData,
  1234.     TQ3ViewObject            view);
  1235.     
  1236. QD3D_EXPORT TQ3Status Q3TriGrid_SetData(
  1237.     TQ3GeometryObject        triGrid, 
  1238.     const TQ3TriGridData    *triGridData);
  1239.  
  1240. QD3D_EXPORT TQ3Status Q3TriGrid_GetData(
  1241.     TQ3GeometryObject        triGrid,
  1242.     TQ3TriGridData            *triGridData);
  1243.  
  1244. QD3D_EXPORT TQ3Status Q3TriGrid_EmptyData(
  1245.     TQ3TriGridData            *triGridData);
  1246.  
  1247. QD3D_EXPORT TQ3Status Q3TriGrid_GetVertexPosition(
  1248.     TQ3GeometryObject        triGrid,
  1249.     unsigned long            rowIndex,
  1250.     unsigned long            columnIndex,
  1251.     TQ3Point3D                *position);
  1252.  
  1253. QD3D_EXPORT TQ3Status Q3TriGrid_SetVertexPosition(
  1254.     TQ3GeometryObject        triGrid,
  1255.     unsigned long            rowIndex,
  1256.     unsigned long            columnIndex,
  1257.     const TQ3Point3D        *position);
  1258.  
  1259. QD3D_EXPORT TQ3Status Q3TriGrid_GetVertexAttributeSet(
  1260.     TQ3GeometryObject        triGrid,
  1261.     unsigned long            rowIndex,
  1262.     unsigned long            columnIndex,
  1263.     TQ3AttributeSet            *attributeSet);
  1264.  
  1265. QD3D_EXPORT TQ3Status Q3TriGrid_SetVertexAttributeSet(
  1266.     TQ3GeometryObject        triGrid,
  1267.     unsigned long            rowIndex,
  1268.     unsigned long            columnIndex,
  1269.     TQ3AttributeSet            attributeSet);
  1270.  
  1271. QD3D_EXPORT TQ3Status Q3TriGrid_GetFacetAttributeSet(
  1272.     TQ3GeometryObject        triGrid,
  1273.     unsigned long            faceIndex,
  1274.     TQ3AttributeSet            *facetAttributeSet);
  1275.  
  1276. QD3D_EXPORT TQ3Status Q3TriGrid_SetFacetAttributeSet(
  1277.     TQ3GeometryObject        triGrid,
  1278.     unsigned long            faceIndex,
  1279.     TQ3AttributeSet            facetAttributeSet);
  1280.  
  1281. #ifdef __cplusplus
  1282. }
  1283. #endif    /* __cplusplus */
  1284.  
  1285. #endif  /* QD3DGeometry_h  */
  1286.